前言
通常情况下,同一模块的配置在开发环境,测试环境,生产环境下都是不同的,例如:mq,dubbo等ip,port,用户名及密码都会不同,这个时候,我们就可以使用Spring自带的PropertyPlaceholderConfigurer对象对嵌入到Spring中的配置进行集中管理,这样不同环境下只是mq.cfg.properties及dubbo.cfg.properties里面的值不同而已,其他文件是都是一致的;从而达到对不同环境下配置文件的合理清晰的管理。
使用案例
mq.cfg.properties配置如下:#mq相关配置(不同环境不同值)
mq.host=127.0.0.1
mq.port=5672
mq.username=admin
mq.password=1234
在全局spring-context.xml中加入如下配置:<!-- spring内置配置 -->
<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:dubbo.cfg.properties</value>
<value>classpath:mq.cfg.properties</value>
</list>
</property>
</bean>
<!-- mq配置 -->
<import resource="spring-rabbitmq-producer.xml" />
spring-rabbitmq-producer.xml配置如下:<!-- 具体使用:通过${key}得到value -->
<rabbit:connection-factory id="connectionFactory" host="${mq.host}" port="${mq.port}" username="${mq.username}" password="${mq.password}" />
总结
不能在同一个spring容器中配置多个PropertyPlaceholderConfigurer对象,这样后面的配置会覆盖前面所有的配置,当根据${key}取值时报异常,导致spring容器启动失败。